﻿"""
发起请求时get的参数需要能在服务器中进行解析
解析方式： 库==> flask有一个全局对象request
            from flask import request
        查看参数： request.args
"""
import json
from flask import Flask, Response
from flask import jsonify
from flask import request

app = Flask(__name__)


# 注册路由
@app.get('/')
def index():
    return "<h4>处理request请求</h4>"


@app.get('/response_type')
def response_type():
    # return "天官赐福 百无禁忌"
    # return "天官赐福 百无禁忌".encode(encoding="GBK")
    # 序列化
    # 此时Content-Type还是text/html
    # 使用python中的json库
    # return json.dumps({"info": "天官赐福"})

    # 此时Content-Type是application/json
    return jsonify({"info": "天官赐福"})

    # # 返回GBK格式的字符串
    # # 此前即使设置的是GBK编码但是返回的是UTF-8编码
    # return Response("天官赐福 百无禁忌".encode(encoding="GBK"), content_type="text/html; charset=gbk")


@app.get('/params')
def params():
    """
    服务器接收了爬虫传输的数据，然后进行了返回

    请求：http://127.0.0.1:5000/params?page=1&size=10
    参数：page=1、size=10

    获取参数：
    request.args.get("参数名", 默认值)
    """
    # # print(request.args)  # ImmutableMultiDict([('page', '1'), ('size', '10')])
    # # 取不到默认是1
    # page = request.args.get("page", 1)
    # size = request.args.get("size", 10)
    #
    # # params参数
    # next = request.args.get("next", "/")
    # sort = request.args.get("sort")

    # 返回响应
    result = {
        "code": 0,

        # "args": {
        #     # "page": page,
        #     # "size": size,
        #     # # params参数
        #     # "next": next,
        #     # "sort": sort
        # },

        # 不知道会有几个参数，不能每一个都进行解析，所以：
        "args": request.args,

        "header": {
            "User-Agent": request.headers["User-Agent"]
        }
    }
    return jsonify(result)


# post请求================================================
@app.post('/data')
def data():
    result = {
        "code": 0,
        "form": request.form,
        "headers": {
            "User-Agent": request.headers["User-Agent"]
        }
    }
    return jsonify(result)


@app.post('/json')
def json():
    print(type(request.json), "========")   # <class 'dict'>
    # 参数数据的类型是一个字典，所以可以获取
    name = request.json.get("name")
    password = request.json.get("password")

    if not name or not password:
        return jsonify({"msg": "参数错误"}), 400

    result = {
        "code": 0,
        "json": request.json,
        "headers": {
            "User-Agent": request.headers["User-Agent"]
        }
    }
    return jsonify(result)


app.run(debug=True)
